package com.jzz;

import java.util.ArrayList;
import java.util.List;

public class PrimeNumberUtils {

    public static void main(String[] args) {
        //最优方法
        List<Integer> primeNumber = getPrimeNumber(1, 100000);
        //传统方法
        List<Integer> primeNumberOld = getPrimeNumberOld(1, 100000);
    }

    /**
     * 在一定范围内获取所有质数的最优算法
     * @param start 起始数字
     * @param end 结束数字
     * @return 在这个范围内的质数
     */
    private static List<Integer> getPrimeNumber (int start, int end) {
        ArrayList<Integer> list = new ArrayList<>();
        boolean flag = true;
        long startTime = System.currentTimeMillis();
        for (int i = start; i <= end; i ++) {
            for ( int j = 2; j*j<= i; j++) {
                if (i%j == 0) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                list.add(i);
            }
            flag = true;
        }
        long endTime = System.currentTimeMillis();
        long time = endTime - startTime;
        System.out.println("获取到"+list.size()+"个质数，用时为"+time+"毫秒");
        return list;
    }

    /**
     * 在一定范围内获取所有质数（传统方法）
     * @param start 起始数字
     * @param end 结束数字
     * @return 在这个范围内的质数
     */
    public static List<Integer> getPrimeNumberOld(int start, int end) {
        ArrayList<Integer> list = new ArrayList<>();
        long startTime = System.currentTimeMillis();
        boolean flag = true;
        for (int i = start; i <= end; i ++) {
            for ( int j = 2; j < i; j++) {
                if (i%j == 0) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                list.add(i);
            }
            flag = true;
        }
        long endTime = System.currentTimeMillis();
        long time = endTime - startTime;
        System.out.println("获取到"+list.size()+"个质数，用时为"+time+"毫秒");
        return list;
    }
}
